repos:
-   repo: meta
    hooks:
    -   id: check-hooks-apply
    -   id: check-useless-excludes

-   repo: https://github.com/pre-commit/pre-commit-hooks
    rev: v4.0.1
    hooks:
    -   id: check-case-conflict
    -   id: check-json
    -   id: check-symlinks
    -   id: check-yaml
    -   id: destroyed-symlinks
    -   id: end-of-file-fixer
        exclude: docs/CNAME
    -   id: fix-byte-order-marker
    -   id: fix-encoding-pragma
        args: [--remove]
    -   id: mixed-line-ending
        args: [--fix=lf]
    -   id: requirements-txt-fixer
    -   id: trailing-whitespace

-   repo: https://github.com/google/yapf
    rev: v0.32.0
    hooks:
    -   id: yapf

-   repo: https://gitlab.com/daverona/pre-commit/cpp
    rev: 0.8.0
    hooks:
    -   id: clang-format  # formatter of C/C++ code based on a style guide: LLVM, Google, Chromium, Mozilla, and WebKit available
        args: []

-   repo: local
    hooks:
    -   id: check-torchdist
        name: check-torchdist
        entry: ./scripts/check-torchdist.py
        language: python
        exclude: ^(deepspeed/comm/|docs/|benchmarks/|scripts/check-torchdist.py|deepspeed/moe/sharded_moe.py|deepspeed/runtime/comm/coalesced_collectives.py|deepspeed/elasticity/elastic_agent.py|deepspeed/launcher/launch.py|tests/unit/comm/test_dist.py)
        # Specific deepspeed/ files are excluded for now until we wrap ProcessGroup in deepspeed.comm

-   repo: local
    hooks:
    -   id: check-license
        name: check-license
        entry: ./scripts/check-license.py
        language: python
        files: \.(py|c|cpp|cu|cc|h|hpp|cuh|hip|tr)$
        exclude: ^(deepspeed/inference/v2/kernels/ragged_ops/blocked_flash|deepspeed/inference/v2/kernels/cutlass_ops/grouped_gemm)

-   repo: https://github.com/codespell-project/codespell
    rev: v2.1.0
    hooks:
    -   id: codespell
        args: [
            # Do not check files that are automatically generated
            '--skip=docs/Gemfile.lock,tests/unit/gpt2-merges.txt,tests/unit/gpt2-vocab.json',
            '--ignore-regex=\\n',  # Do not count the 'n' in an escaped newline as part of a word
            '--ignore-words-list=youn,unsupport,noe',  # Word used in error messages that need rewording
            --check-filenames,
            --check-hidden
        ]

-   repo: https://github.com/pycqa/flake8
    rev: 4.0.1
    hooks:
    -   id: flake8
        args: ['--config=.flake8']

-   repo: local
    hooks:
    -   id: check-torchcuda
        name: check-torchcuda
        entry: ./scripts/check-torchcuda.py
        language: python
        exclude: ^(.github/workflows/|scripts/check-torchcuda.py|docs/_tutorials/accelerator-abstraction-interface.md|accelerator/cuda_accelerator.py|deepspeed/inference/engine.py|deepspeed/model_implementations/transformers/clip_encoder.py|deepspeed/model_implementations/diffusers/vae.py|deepspeed/model_implementations/diffusers/unet.py|op_builder/spatial_inference.py|op_builder/transformer_inference.py|op_builder/builder.py|setup.py|tests/unit/ops/sparse_attention/test_sparse_attention.py)
        # Specific deepspeed/ files are excluded for now until we wrap ProcessGroup in deepspeed.comm

-   repo: local
    hooks:
    -   id: check-extraindexurl
        name: check-extraindexurl
        entry: ./scripts/check-extraindexurl.py
        language: python
        files: \.(yml|yaml|sh|py)$
        exclude: ^(scripts/check-extraindexurl.py)
